package org.nudt.common.repository;

import org.nudt.common.model.Video
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.JpaSpecificationExecutor
import org.springframework.data.jpa.repository.Query

interface VideoRepository : JpaRepository<Video, Int>, JpaSpecificationExecutor<Video> {
    
    
    fun getVideoById(id: Int): Video
    
    /**
     * 根据类型ID排序获取视频列表
     *
     * 该函数用于根据指定的类型ID和分页信息获取视频列表，并按创建时间排序。
     *
     * @param videoClass 视频的类型ID，用于过滤特定类型的视频
     * @param status 视频状态，已发布、待编辑
     * @param pageable 分页信息，包含页码和每页显示的记录数
     * @return 返回一个分页的视频列表，包含视频对象和分页信息
     */
    fun getByVideoClassAndStatusOrderByUpdatedAtDescIdDesc(videoClass: Int, status: Boolean, pageable: Pageable): Page<Video>
    
    @Query(
        """
        from Video where typeId = :typeId order by RAND()
        """
    )
    fun getVideosOrderByRand(typeId: Int, pageable: Pageable): List<Video>
    
    fun getByLevel(level: Int): List<Video>
    
    fun getTopByVideoName(vodName: String): Video?
    
    fun findByCoverUrlStartingWith(keyword: String): List<Video>
    
    fun findBySerialEquals(serial: Int): List<Video>
}